/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [FormatMenuListener.java]
 * Creation Date        [11-Jul-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_02_gui.notepad_V1.ui.format;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JTextArea;

import pkg_02_gui.notepad_V1.ui.font.FontDialog;
import pkg_02_gui.notepad_V1.ui.font.FontToolBar;
import pkg_02_gui.notepad_V1.ui.main.NotepadFrame;

/**
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class FormatMenuListener extends FormatMenu implements ActionListener {

	private static final long serialVersionUID = -2865344472494133026L;

	private final JTextArea textArea;
	private NotepadFrame frame = null;
	private FontToolBar fontToolBar = null;

	/**
	 * 为菜单项添加监听器
	 */
	private void addListenerToItem() {
		getWordWrapItem().addActionListener(this);
		getFontItem().addActionListener(this);
		fontToolBar = new FontToolBar(this);
	}

	/**
	 * 添加浮动工具栏到窗口
	 */
	private void addToolbarToPanel() {
		frame.getToolbarPanel().add(fontToolBar);
	}

	public FormatMenuListener(String menuName, JTextArea textArea,
			NotepadFrame frame) {
		super(menuName);
		this.frame = frame;
		this.textArea = textArea;
		addListenerToItem();
		addToolbarToPanel();
	}

	@Override
	@SuppressWarnings("unused")
	public void actionPerformed(ActionEvent e) {
		/** **************************自动换行*************************** */
		if (e.getSource() == getWordWrapItem()) {
			textArea.requestFocusInWindow();
			if (textArea.getLineWrap()) {
				textArea.setLineWrap(false);
			} else {
				textArea.setLineWrap(true);
			}
		}
		/** **************************字体*************************** */
		if (e.getSource() == getFontItem()) {
			textArea.requestFocusInWindow();
			FontDialog frame = new FontDialog(textArea);
		}
		/** **************************字体加粗*************************** */
		if (e.getSource() == fontToolBar.getBoldButton()) {
			textArea.requestFocusInWindow();
			Font newFont;
			if (textArea.getFont().getStyle() == Font.BOLD) {
				newFont = new Font(textArea.getFont().getName(), Font.PLAIN,
						textArea.getFont().getSize());
			} else if (textArea.getFont().getStyle() == Font.BOLD + Font.ITALIC) {
				newFont = new Font(textArea.getFont().getName(), Font.PLAIN
						+ Font.ITALIC, textArea.getFont().getSize());
			} else {
				newFont = new Font(textArea.getFont().getName(), textArea
						.getFont().getStyle() + Font.BOLD, textArea.getFont()
						.getSize());
			}
			textArea.setFont(newFont);
		}
		/** **************************字体倾斜*************************** */
		if (e.getSource() == fontToolBar.getItalicButton()) {
			textArea.requestFocusInWindow();
			Font newFont;
			if (textArea.getFont().getStyle() == Font.ITALIC) {
				newFont = new Font(textArea.getFont().getName(), Font.PLAIN,
						textArea.getFont().getSize());
			} else if (textArea.getFont().getStyle() == Font.BOLD + Font.ITALIC) {
				newFont = new Font(textArea.getFont().getName(), Font.BOLD,
						textArea.getFont().getSize());
			} else {
				newFont = new Font(textArea.getFont().getName(), textArea
						.getFont().getStyle() + Font.ITALIC, textArea.getFont()
						.getSize());
			}
			textArea.setFont(newFont);
		}
		/** **************************字体更换*************************** */
		if (e.getActionCommand() == "Type") {
			String fontName = fontToolBar.getFontName();
			Font newFont = new Font(fontName, textArea.getFont().getStyle(),
					textArea.getFont().getSize());
			textArea.setFont(newFont);
		}
		/** **************************字体大小*************************** */
		if (e.getActionCommand() == "Size") {
			int fontSize = fontToolBar.getFontSize();
			Font newFont = new Font(textArea.getFont().getName(), textArea
					.getFont().getStyle(), fontSize);
			textArea.setFont(newFont);
		}

	}
}
